package com.sitanyun.merchant.guide.weiht;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import com.sitanyun.merchant.guide.R;
import com.sitanyun.merchant.guide.base.ToastUtil;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelmsg.WXImageObject;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXMiniProgramObject;
import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

import java.io.ByteArrayOutputStream;

/**
 * Created by jzl
 * on 2021/12/27.
 */
public class WxShareUtils {

    private static Bitmap ysBitmap;
    private static Bitmap bitmap;

    /**
     * 分享网页类型至微信
     *0代表分享到微信好友，1代表分享到朋友圈
     * @param context 上下文
     * @param appId   微信的appId
     * @param webUrl  网页的url
     * @param title   网页标题
     * @param content 网页描述
     *  bitmap  位图
     */
    public static void shareWeb(int flag,Context context, String appId, String webUrl, String title, String content) {
        // 通过appId得到IWXAPI这个对象
        IWXAPI wxapi = WXAPIFactory.createWXAPI(context, appId);
        // 检查手机或者模拟器是否安装了微信
        if (!wxapi.isWXAppInstalled()) {
            ToastUtil.showToast(context,"您还没有安装微信");
            return;
        }

        // 初始化一个WXWebpageObject对象
        WXWebpageObject webpageObject = new WXWebpageObject();
        // 填写网页的url
        webpageObject.webpageUrl = webUrl;

        // 用WXWebpageObject对象初始化一个WXMediaMessage对象
        WXMediaMessage msg = new WXMediaMessage(webpageObject);
        // 填写网页标题、描述、位图
        msg.title = title;
        msg.description = content;
        // 如果没有位图，可以传null，会显示默认的图片
      //  msg.setThumbImage(bitmap);

        // 构造一个Req
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        // transaction用于唯一标识一个请求（可自定义）
        req.transaction = "webpage";
        // 上文的WXMediaMessage对象
        req.message = msg;
        // SendMessageToWX.Req.WXSceneSession是分享到好友会话
        // SendMessageToWX.Req.WXSceneTimeline是分享到朋友圈
//        req.scene = SendMessageToWX.Req.WXSceneSession;
        req.scene = flag==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline;
        // 向微信发送请求
        wxapi.sendReq(req);
    }

    /**
     * 图片
     * @param flag
     * @param context
     * @param appId
     * @param bmp
     */
    public static void shareImage(int flag, Context context, String appId, Bitmap bmp) {
        // 通过appId得到IWXAPI这个对象
        IWXAPI wxapi = WXAPIFactory.createWXAPI(context, appId);
        // 检查手机或者模拟器是否安装了微信
        if (!wxapi.isWXAppInstalled()) {
            ToastUtil.showToast(context,"您还没有安装微信");
            return;
        }
       // Bitmap bmp = BitmapFactory.decodeFile(picFile.toString());

//初始化 WXImageObject 和 WXMediaMessage 对象
        WXImageObject imgObj = new WXImageObject(bmp);
        WXMediaMessage msg = new WXMediaMessage();
        msg.mediaObject = imgObj;

//设置缩略图
        Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 120, 120, true);
//        bmp.recycle();
        msg.thumbData = bmpToByteArray(thumbBmp, true);

//构造一个Req
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = buildTransaction("img");
        req.message = msg;
        req.scene = flag==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline;
//        req.userOpenId = getOpenId();
//调用api接口，发送数据到微信
        wxapi.sendReq(req);
    }
    public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.PNG, 100, output);
        if (needRecycle) {
            bmp.recycle();
        }

        byte[] result = output.toByteArray();
        try {
            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    private static String buildTransaction(final String type) {
        return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
    }
    //分享小程序

    /**
     * 分享小程序
     *0代表分享到微信好友，1代表分享到朋友圈
     * @param context 上下文
     * @param appId   微信的appId
     *    网页的url
     * @param title   网页标题
     *  bitmap  位图
     */
    public static void shareWxMin(Context context, String appId,String desc,String urls, String title , String userName, String path,Bitmap bmp) {
        // 通过appId得到IWXAPI这个对象
        IWXAPI wxapi = WXAPIFactory.createWXAPI(context, appId);
        // 检查手机或者模拟器是否安装了微信
        if (!wxapi.isWXAppInstalled()) {
            ToastUtil.showToast(context,"您还没有安装微信");
            return;
        }

        // 初始化一个WXWebpageObject对象
        WXMiniProgramObject miniProgramObj = new WXMiniProgramObject();
       miniProgramObj.webpageUrl = urls; // 兼容低版本的网页链接
        miniProgramObj.miniprogramType = 0;// 正式版:0，kaifaban:1，体验版:2
        miniProgramObj.userName = userName;     // 小程序原始id
        miniProgramObj.path = path;            //小程序页面路径；对于小游戏，可以只传入 query 部分，来实现传参效果，如：传入 "?foo=bar"
        WXMediaMessage msg = new WXMediaMessage(miniProgramObj);
        msg.title = title;                    // 小程序消息title
        msg.description = desc;            //描述

     //   bitmap = ImageLoadUtrils.getBitmap(bmp);

//        if (ImageLoadUtrils.isOverSize(bitmap,128)){
//            ysBitmap = ImageLoadUtrils.imageZoom(bitmap);
//            msg.setThumbImage(ysBitmap);// 小程序消息封面图片，小于128k
//        }else{
//            msg.setThumbImage(ysBitmap); // 小程序消息封面图片，小于128k
//        }


//设置缩略图
        if (bmp==null){
        Bitmap thumb = BitmapFactory.decodeResource(context.getResources(), R.mipmap.poerbac);
        msg.setThumbImage(thumb);
        }else {
            Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 120, 120, true);
//        bmp.recycle();
            msg.setThumbImage(thumbBmp);
        }
//        Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 120, 120, true);
//        bmp.recycle();
//        msg.setThumbImage(thumbBmp);
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = buildTransaction("miniProgram");
        req.message = msg;
        req.scene = SendMessageToWX.Req.WXSceneSession;  // 目前只支持会话
        wxapi.sendReq(req);
    }

}

